#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
一个简单的 Flask 服务器，用于提供 Gitee 贡献者数据 API。
"""

from flask import Flask, jsonify, make_response
from flask_cors import CORS
import sqlite3
import os

app = Flask(__name__)
# 允许所有跨域请求，方便开发环境调试
CORS(app) 

DB_NAME = "gitee_data.db"

def get_db_connection():
    """
    创建并返回数据库连接。
    """
    conn = sqlite3.connect(DB_NAME)
    conn.row_factory = sqlite3.Row  # 允许通过列名访问数据
    return conn

def get_contributors_by_repo(conn, repo_id):
    """
    根据仓库 ID 获取所有贡献者并进行分类。
    """
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM contributors WHERE repo_id = ? ORDER BY commits DESC", (repo_id,))
    all_contributors = cursor.fetchall()

    core_contributors = []
    active_contributors = []
    legacy_contributors = []

    # 简单的贡献者分类逻辑（可根据需要调整）
    # 提交数 > 50 为核心贡献者 (Core)
    # 提交数 > 10 且 <= 50 为活跃贡献者 (Active)
    # 提交数 <= 10 为历史贡献者 (Legacy)
    for row in all_contributors:
        contributor = {
            'id': row['contributor_id'],
            'name': row['username'],
            'avatarUrl': row['avatar_url'],
            'summary': f"提交数: {row['commits']} 次",
            'profileUrl': row['user_profile_url']
        }
        if row['commits'] > 50:
            core_contributors.append(contributor)
        elif row['commits'] > 10:
            active_contributors.append(contributor)
        else:
            legacy_contributors.append(contributor)

    return core_contributors, active_contributors, legacy_contributors


@app.route('/api/projects', methods=['GET'])
def get_projects():
    """
    提供项目及其贡献者数据的 API 接口。
    """
    if not os.path.exists(DB_NAME):
        return make_response(jsonify({"error": f"数据库文件 '{DB_NAME}' 不存在。请先运行数据抓取脚本。"}), 500)

    try:
        conn = get_db_connection()
        cursor = conn.cursor()

        # 获取所有仓库
        cursor.execute("SELECT * FROM repositories")
        repos = cursor.fetchall()
        
        all_projects_data = {}

        # 遍历每个仓库并获取贡献者数据
        for repo in repos:
            repo_id = repo['repo_id']
            repo_name = repo['repo_name']
            
            core, active, legacy = get_contributors_by_repo(conn, repo_id)
            
            # 格式化数据以匹配前端的结构
            all_projects_data[repo_name] = {
                'core': core,
                'active': active,
                'legacy': legacy
            }
        
        conn.close()
        return jsonify(all_projects_data)

    except sqlite3.Error as e:
        return make_response(jsonify({"error": f"数据库操作失败: {e}"}), 500)
    except Exception as e:
        return make_response(jsonify({"error": f"服务器内部错误: {e}"}), 500)

if __name__ == '__main__':
    # 在运行服务器前，请确保您已经运行了数据抓取脚本来生成数据库文件。
    if not os.path.exists(DB_NAME):
        print(f"警告：数据库文件 '{DB_NAME}' 不存在。")
        print("请先运行数据抓取脚本以生成数据库文件，否则服务器将无法返回数据。")
    print("服务器正在启动，请确保端口 5000 未被占用...")
    app.run(port=5450, debug=True)